/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年5月4日
 * <修改描述:>
 */
package com.tx.component.task.annotations;

/**
 * 任务的接口<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年5月4日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
@TaskClass(getIdMethodName = "getId", getParentIdMethodName = "getParentId", getNameMethodName = "getName", getRemarkMethodName = "getRemark", getExecutableMethodName = "isExecutable", getPriorityMethodName = "getPriority")
public interface ITask {
    
    /**
     * 任务唯一键<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
    */
    public String getId();
    
    /**
     * 父级任务唯一键<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
    */
    public String getParentId();
    
    /**
     * 事务名称<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public default String getName() {
        return getId();
    }
    
    /**
     * 事务的描述信息<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public default String getRemark() {
        String className = getClass().getName();
        return className;
    }
    
    /**
     * 任务优先级值<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return int [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public default int getPriority() {
        return 0;
    }
    
    /**
     * 是否能够被容器直接执行，默认可以
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return boolean [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public default boolean isExecutable() {
        return true;
    }
}
